/* 
	Définit les différentes classes pour le codage 
	TODO  : UPGRADER vers la libperseus.
*/	
#ifndef _nsPerseusPCC_H_
#define _nsPerseusPCC_H_

#include "nsPerseusUtil.h"
extern "C"{
#include "perseusHTTP.h"
#include "perseus.h"
}
#include "plhash.h"
#include "prlock.h"
/*
LA classe nsPerseusCode est la classe "haute", elle fait 
l'interface entre les fonctions de firefox et la libraire Perseus.
Implémente une table de hashage pour la sauvegarde des différents codeurs par serveur.
TODO : A upgrader pour le support de la libperseus
*/
class nsPerseusCode  
{
public :
  nsPerseusCode();
  ~nsPerseusCode();
  PRBool hasACode(const nsACString& host);
  PRBool deleteAcode(const nsACString& host);
  nsresult createAcode(const nsACString& host);
  char * toString(const nsACString& host);
  nsresult code(const nsACString& host,const nsACString & aData,
                PRUint64 aLength,
                nsACString & aDataCoded,
                PERSEUS_CTYPE_t type);
  nsresult decode(const nsACString& host,
                  const nsACString & aDataCoded,
                  PRUint64 aLength,
                  nsACString & aData);
  char * getID(const nsACString &host);

protected :
  PLHashTable * mTable;

private :
  PRLock *  mLock;

};

#endif //_PerseusPCC_H

